胎嘎侯
接下來幾天的日記都會以閱讀官方文件
為主,以自己的方式整理不熟或是想加強印象的部分。先前總是想到要做什麼才去查文件,後來想想學習順序應該是先看文件再以關鍵字去查比較理想,故想藉由這次的鐵人賽好好督促自己把文件仔細看過一次,內化到自己的腦海中。
Middleware在官方文件中的解釋為,提供一種方便的機制來過濾進入應用程序中的HTTP Request。前面說的是Middleware的基本功能,實際上Middleware很常用在用戶身分驗證功能上。
那麼Middleware是如何運作的呢?我做了一張圖用比較生活化的方式來解釋。
今天我要去拜訪某家公司,到了門口警衛發出進入請求(Request)要驗證你訪客的身分是否為真(middleware),因此先看看你的身分是否安全。如果你的身分無誤,就會指引(Routes)你到公司某個部門進行拜訪或進行業務交流(Response);如果你的身分有問題,門口警衛直接拒絕你的請求,或請你在會客室等待身分確認。在實際狀況中,如果用戶未能通過認證,middleware會把用戶重新導到登錄頁面,或者return一個字串說明驗證未通過。
在這個例子中Middleware只有一層,但是其實它的概念很像一層層的洋蔥,你可能寫了很多要驗證的請求,因此Middleware會不斷的傳遞給下一個Middleware,直到沒有Middleware,進入應用程序前為止。
Before & After Middleware意即在請求之前還是之後,以BeforeMiddleware
、AfterMiddleware
表示。
將$request傳給$next(),代表將它交給下一個的middleware,依序往下傳遞直到沒有Middleware可以轉傳,最後到達應用程式。
handle方法負責接收一個Illuminate Request 物件,並回傳Illuminate Response 物件。
<?php
//在應用程序處理請求"之前"執行某些任務
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}
在應用程序處理請求"後"才交由Middleware執行其任務,最後返回$response
給用戶。
<?php
//在應用程序處理請求"後"執行其任務
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
今天對Middleware的筆記就到這裡,如有說明不妥之處,代表我還不夠熟悉,歡迎在下面留言~那我們明天見囉!